import pymysql
from pymysql.cursors import DictCursor
from contextlib import contextmanager
from backend.config import DATABASE

@contextmanager
def get_db_connection():
    conn = None
    cursor = None
    try:
        conn = pymysql.connect(
            host=DATABASE['host'],
            port=DATABASE['port'],
            user=DATABASE['user'],
            password=DATABASE['password'],
            database=DATABASE['database'],
            charset=DATABASE['charset'],
            cursorclass=DictCursor,
            autocommit=False  # 手动控制事务
        )
        cursor = conn.cursor()
        # return cursor, conn
        yield cursor, conn  # 通过 yield 返回给 with 语句
    except Exception as e:
        print(f"数据库操作失败: {e}")
        raise
    finally:
        if cursor:
            cursor.close()
        if conn:
            conn.close()



# 初始化数据库表
def init_db():
    with get_db_connection() as (cursor, conn):
        pass  # 表已在Navicat中创建，无需执行任何操作
        # 1. 用户表 (users)
        # 存储用户基本信息
        # 2. 产品表 (products)
        # 存储化妆品产品信息
        # 3. 订单表 (orders)
        # 存储用户订单信息
        # 4. 产品 FAQ 表 (product_faq)
        # 存储特定产品的常见问题
        # 5. 通用 FAQ 表 (general_faq)
        # 存储不特定于某个产品的常见问题
        # 6. 对话记录表 (chat_history)
        # 存储用户与客服机器人的对话记录
        # 7. 客服转接表 (csr_transfer)
        # 存储客服转接请求
        # 8. 同义词表 (synonyms)
        # 存储关键词及其同义词，用于意图识别
        # 9. 售后规则表 (after_sales_rules)
        # 存储售后政策和规则
        # 10. 操作日志表 (operation_logs)
        # 记录关键操作，如地址修改
        # 已在Navicat中创建，无需执行任何操作